// Copyright (c) 2024 刻BITTER
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.


#pragma once


/**
 * @brief 提供两种编译配置方式：ioxx_device_config.hpp 和ioxx_flag.hpp 头文件，前者需要包含所有与设备相关的配置和代码片段，
 * 以支持更上层的设备驱动代码。后者提供了进一步配置行为的宏及其默认值，后者用于覆盖device_config 中的默认值。
 * 这些默认值也可以用编译选项覆盖。
 *
 * ioxx 内置部分设备的device_config，存放在device 文件夹下。
 * 如果用户环境中没有提供ioxx_device_config.hpp，则使用内置的device_config。
 *
 */


#if __has_include("ioxx_flag.hpp")

    #include "ioxx_flag.hpp"

#endif


#if __has_include("ioxx_device_config.hpp")

    #include "ioxx_device_config.hpp"

#else

    #if defined(__CORTEX_M) || (defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M')
    
        #define _IOXX_ARCH_CORTEX_M

        #include "device/cortex_m.hpp"

    #elif defined(__AVR_ARCH__)
    
        #define _IOXX_ARCH_AVR

        #include "device/avr.hpp"

    #endif

#endif